package com.jdd.modules.parkmonthly.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.jdd.common.api.vo.Result;
import com.jdd.modules.configcartype.entity.ConfigCarType;
import com.jdd.modules.parkcar.entity.ParkCarMonthly;
import com.jdd.modules.parkcar.entity.ParkSpace;
import com.jdd.modules.parking.entity.ParkCarEnterLog;
import com.jdd.modules.parkmonthly.entity.MonthlyCarTypeConvert;
import com.jdd.modules.parkmonthly.entity.MonthlyCardInfo;
import com.jdd.modules.parkmonthly.entity.MonthlyPackageInfo;
import com.jdd.modules.parkmonthly.vo.MonthlyCardEditInfoVO;

import java.util.List;

/**
 * @Description: 月卡信息表
 * @Author: jdd
 * @Date: 2021-11-09
 * @Version: V1.0
 */
public interface ITaskMonthlyCardInfoService extends IService<MonthlyCardInfo> {

    /**
     * 编辑，查询该月卡信息绑定的车位信息
     *
     * @param monthlyCardInfo
     * @return
     */
    Result getUpateCarPlaceInfo(MonthlyCardInfo monthlyCardInfo);

    /**
     * 注销月卡信息
     *
     * @param monthlyCardInfo
     * @return
     */
    Result getMonthlyCardConcel(MonthlyCardInfo monthlyCardInfo);

    /**
     * 月卡修改
     *
     * @param monthlyCardInfo
     * @return
     */
    Result<Object> editMonthlyCards(MonthlyCardInfo monthlyCardInfo);

    /**
     * 月卡新增
     *
     * @param monthlyCardInfo
     * @return
     */
    Result<MonthlyCardInfo> addMonthlyCardInfo(MonthlyCardInfo monthlyCardInfo);

    /**
     * 月卡延期
     *
     * @param monthlyCardDelayDto
     * @return
     */
    Result issueUpdateMonthlyCardDelay(MonthlyCardEditInfoVO monthlyCardDelayDto);

    ConfigCarType getCarType(String parkCode, int type);

    /**
     * 封装转卡信息
     *
     * @param monthlyCardInfo
     * @param parkCarEnterLog
     * @param monthlyPackageInfo
     * @return
     */
    MonthlyCarTypeConvert getMonthlyCarTypeConvert(MonthlyCardInfo monthlyCardInfo, ParkCarEnterLog
            parkCarEnterLog, MonthlyPackageInfo monthlyPackageInfo);

    /**
     * 封装月租车实体信息
     *
     * @param parkSpaces
     * @param plateNoList
     * @param monthlyCardInfo
     * @return
     */
    List<ParkCarMonthly> getParkCarMonthlyEntity(List<ParkSpace> parkSpaces, List<String> plateNoList, MonthlyCardInfo monthlyCardInfo);

    /**
     * 最近的一条入场记录，是否在指定区域内
     *
     * @param parkCode
     * @param plateNos
     * @param areaList
     * @return
     */
    List<ParkCarEnterLog> getList(String parkCode, List<String> plateNos, List<String> areaList);

}
